<?php
/**
 * 系统配置操作
 * 
 * ============================================================================
 * 版权所有: (c) 2009-2011，<UEShop Inc>，并保留所有权利。
 * 网站地址: http://www.ueshop.cn
 * ----------------------------------------------------------------------------
 * 这不是一个自由软件！您只能在不用于商业目的的前提下对程序代码进行修改和使用；
 * 不允许对程序代码以任何形式任何目的的再发布。
 * ============================================================================
 * @author cmpan
 * @copyright   Copyright (c) 2009-2011 UEShop Inc. (http://www.ueshop.cn)
 * @license     http://www.ueshop.cn/1_0.txt
 */

class UE_Config_Exception extends UE_Exception {}

/**
 * 系统配置
 * 
 */
final class UE_Config {
	/**
	 * 配置数据
	 * 
	 * @var array
	 */
	protected static $_config = array();
		
	/**
	 * 载入配置文件
	 *
	 * @return array
	 * @throws UE_Config_Exception
	 */
	public static function load() {
		$configFile = is_file(DATA_DIR.'/config.php') ? DATA_DIR.'/config.php' : SITE_DIR.'/libs/config.sample.php';
		if(is_file($configFile)) {
			return self::$_config  = (array) include $configFile;
		} else {
			throw new UE_Config_Exception('config file (' . $configFile . ') not exists');
		}
	}
	
	/**
	 * 添加配置
	 *
	 * @param string $name
	 * @param string $value
	 */
	public static function set($name, $value) {
		self::$_config || self::load();
		self::$_config[$name] = $value;
	}
	
	/**
	 * 读取变量
	 *
	 * @param string $name
	 * @return string
	 */
	public static function get($name) {
		self::$_config || self::load();
		if (!isset(self::$_config[$name])) {
			throw new UE_Config_Exception('undefined config element: ' . $name);
		}
		return self::$_config[$name];
	}
	
	/**
	 * 读取所有的配置信息
	 *
	 * @return array
	 */
	public static function getConfig() {
		self::$_config || self::load();
		return self::$_config;
	}
		
	/**
	 * 保存配置信息
	 *
	 * @TODO 加上可以保存注释的功能
	 * 
	 * @param string $name
	 * @return bool
	 */
	public static function store() {
		$configFile = is_file(DATA_DIR.'/config.php') ? DATA_DIR.'/config.php' : SITE_DIR . '/libs/config.sample.php';
		
		$confTxt = file_get_contents($configFile);
		
		foreach (self::$_config as $key=>$val) {			
			if (is_string($val)) {
				$val = "'".$val. "'";
			} else {
				$val = (float) $val;
			}
			$confTxt = preg_replace("/(.*?['\"]{$key}['\"]\s*?=\>).*?(,.*?)/im", "\\1 {$val}\\2", $confTxt);
		}
		
		file_put_contents(DATA_DIR.'/config.php', $confTxt, LOCK_EX);
		chmod(DATA_DIR.'/config.php', 0644);	
	}
}
